package com.common.utils;


import sun.misc.BASE64Encoder;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class MeUtils {

    public static  final  String UTF_8="UTF-8";

    public static void mapCopy(Map paramsMap, Map resultMap) {
        if (resultMap == null) resultMap = new HashMap();
        if (paramsMap == null) return;

        Iterator it = paramsMap.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            Object key = entry.getKey();
            resultMap.put(key, paramsMap.get(key) != null ? paramsMap.get(key) : "");

        }
    }

    /**
     * 找到股票再某个区间的最高值和最低值
     * @param dm1
     * @param mHistoryDatum
     * @param code
     */
//    public static void getHandL(Map<String, MHistoryData> dm1, MHistoryData mHistoryDatum, String code) {
//        MHistoryData vo = dm1.get(code);
//        if(null==vo){
//            dm1.put(code,mHistoryDatum);
//        }else{
//            BigDecimal vh = vo.getH();
//            BigDecimal vl = vo.getL();
//
//            BigDecimal mh = mHistoryDatum.getH();
//            BigDecimal ml = mHistoryDatum.getL();
//
//            if(mh.compareTo(vh)==1){//出现新高
//                vo.setD(mHistoryDatum.getD());
//                vo.setH(mh);
//            }
//
//            if(ml.compareTo(vl)==-1){//出现新低
//                vo.setD(mHistoryDatum.getD());
//                vo.setL(ml);
//            }
//        }
//
//    }

    /**
     * 计算股票最大回撤
     *
     * 回撤率是指基金在一段时间内，其净值从最高的位置，
     * 下跌到最低位置的幅度，即回撤率＝（历史高点－历史低点）／历史高点×100％。
     * 比如，某基金净值在一个月内的最高值为2元，其最低的净值为1.0元，
     * 则该基金在这一个月内的回撤率＝（2.0－1.0）／2.0×100％＝50％。
     */
    public static BigDecimal getMaxBack(BigDecimal h, BigDecimal l) {
        BigDecimal subtract = h.subtract(l);
        BigDecimal divide = subtract.divide(h, 4, BigDecimal.ROUND_UP);
        return  divide;

    }

    /**
     * 计算涨幅
     * @param nowLast:现在的价格
     * @param aMinAgoLast:1分钟之前的价格
     */
    public  static BigDecimal calculateTrend(String nowLast, String aMinAgoLast) {
        if(com.baomidou.mybatisplus.toolkit.StringUtils.isEmpty(nowLast)|| com.baomidou.mybatisplus.toolkit.StringUtils.isEmpty(aMinAgoLast)){
            return null;
        }

        try{
            BigDecimal nowLastBig = new BigDecimal(nowLast);
            BigDecimal aMinAgoLastBig = new BigDecimal(aMinAgoLast);

            BigDecimal subtract = nowLastBig.subtract(aMinAgoLastBig);
            BigDecimal divide = subtract.divide(aMinAgoLastBig, 4, BigDecimal.ROUND_HALF_UP);
            return  divide;
        }catch (Exception e){
            return new BigDecimal("0");
        }

    }

    public static double getProb(Integer add, Integer sub) {
        if(null!=add&&null!=sub){
            double v = add / (double) (sub + add);
            double zdf7 = new BigDecimal(v).setScale(2, BigDecimal.ROUND_UP).doubleValue();
            return zdf7;
        }else{
            if(null!=add&&null==sub){
                return  1;
            }else{
                return  0;
            }
        }
    }

    public static void main(String[] args) {

        BigDecimal bigDecimal = calculateTrend("9.9", "9");
        System.out.println(bigDecimal);
    }

    public static String getPercent(String doubleStr) {
        DecimalFormat df = new DecimalFormat("0.00%");
        return  df.format(Double.valueOf(doubleStr)).replaceAll("%","");
    }

    /**
     * 网络图片转base64
     */
    public static String imgBase64(String imgURL) {
        ByteArrayOutputStream outPut = new ByteArrayOutputStream();
        byte[] data = new byte[1024];
        try {
            // 创建URL
            URL url = new URL(imgURL);
            // 创建链接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(10 * 1000);

            if(conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
                return "fail";//连接失败/链接失效/图片不存在
            }
            InputStream inStream = conn.getInputStream();
            int len = -1;
            while ((len = inStream.read(data)) != -1) {
                outPut.write(data, 0, len);
            }
            inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(outPut.toByteArray());
    }

}
